package com.mlnx.device.service;

import com.mlnx.device.entity.Device;
import com.mlnx.device.enums.DeviceType;
import com.mlnx.device.pojo.dto.DeviceGroupDto;
import com.mlnx.device.pojo.form.ConfigEcgDeviceForm;
import com.mlnx.device.pojo.form.DeviceForm;
import com.mlnx.device.pojo.vo.DeviceCountVO;
import com.mlnx.device.pojo.vo.DeviceGroupVO2;
import com.mlnx.device.pojo.vo.DeviceVO;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * Created by amanda.shan on 2019/10/25.
 */
public interface DeviceService extends IBaseService<Device> {

    /**
     * 根据设备id获取病人id
     *
     * @param deviceId
     * @return
     */
    Device getDevice(String deviceId);


    /**
     * 获取设备绑定的患者
     *
     * @param deviceIds
     * @return
     */
    Map<String, Device> getDeviceMap(Collection<String> deviceIds);

    /**
     * 添加设备
     *
     * @param deviceForm
     */
    void addDevice(DeviceForm deviceForm);

    /**
     * 绑定设备
     *
     * @param patientId
     * @param deviceId
     */
    void bindDevice(Integer patientId, String deviceId);

    /**
     * 批量假删设备
     *
     * @param ids
     */
    void deleteDevices(Integer[] ids);

    /**
     * 获取患者当前绑定的所有设备
     *
     * @param patientId
     * @return
     */
    List<DeviceVO> getBoundDevices(Integer patientId);

    /**
     * 获取各类型设备数量及在线数量
     *
     * @return
     */
    List<DeviceCountVO> getDeviceCount();
    /**
     * 通过类型ID获取设备信息
     *
     * @return
     */
    List<Device> getTypeDevice(DeviceType deviceType,Integer pushId,Integer userId);

    /**
     * 配置设备
     *
     * @param configEcgDeviceForm
     */
    void configEcgDevice(ConfigEcgDeviceForm configEcgDeviceForm);

    /**
     * 获得未绑定过群组的设备
     *
     * @return
     */
    List<Device> getUnbindGroupDevice();


    /**
     * 通过群组ID绑定病人
     *
     * @param patientId
     * @param groupId
     */
    void bindDeviceByGroupId(Integer patientId, Integer groupId);

    /**
     * 将设备与群组解绑
     *
     * @param deviceId
     */
    void unbindDevice(String deviceId);

    /**
     * 获取所有群组信息
     *
     */
    List<DeviceGroupVO2> getAllGroupInfo();


    /**
     * 根据手机MAC地址得到其他三个绑定设备的MAC和病人ID
     *
     */
    DeviceGroupDto getOtherDevice(String device);
}
